﻿using System;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.Owin;
using Microsoft.Owin;
using Microsoft.Owin.Security.Cookies;
using Microsoft.Owin.Security.Google;
using Owin;
using WriterStars.Models;
using WriterStars.Data;
using WriterStars.Model;
using Microsoft.Owin.Security.Facebook;
using System.Security.Claims;

namespace WriterStars
{
    public partial class Startup
    {
        // For more information on configuring authentication, please visit http://go.microsoft.com/fwlink/?LinkId=301864
        public void ConfigureAuth(IAppBuilder app)
        {
            // Configure the db context, user manager and signin manager to use a single instance per request
            app.CreatePerOwinContext(WriterStarsDbContext.Create);
            app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
            app.CreatePerOwinContext<ApplicationSignInManager>(ApplicationSignInManager.Create);

            // Enable the application to use a cookie to store information for the signed in user
            // and to use a cookie to temporarily store information about a user logging in with a third party login provider
            // Configure the sign in cookie
            app.UseCookieAuthentication(new CookieAuthenticationOptions
            {
                AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
                LoginPath = new PathString("/Account/Login"),
                Provider = new CookieAuthenticationProvider
                {
                    // Enables the application to validate the security stamp when the user logs in.
                    // This is a security feature which is used when you change a password or add an external login to your account.  
                    OnValidateIdentity = SecurityStampValidator.OnValidateIdentity<ApplicationUserManager, User>(
                        validateInterval: TimeSpan.FromMinutes(30),
                        regenerateIdentity: (manager, user) => user.GenerateUserIdentityAsync(manager))
                }
            });
            app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);

            // Enables the application to temporarily store user information when they are verifying the second factor in the two-factor authentication process.
            app.UseTwoFactorSignInCookie(DefaultAuthenticationTypes.TwoFactorCookie, TimeSpan.FromMinutes(5));

            // Enables the application to remember the second login verification factor such as phone or email.
            // Once you check this option, your second step of verification during the login process will be remembered on the device where you logged in from.
            // This is similar to the RememberMe option when you log in.
            app.UseTwoFactorRememberBrowserCookie(DefaultAuthenticationTypes.TwoFactorRememberBrowserCookie);

            // Uncomment the following lines to enable logging in with third party login providers
            //app.UseMicrosoftAccountAuthentication(
            //    clientId: "",
            //    clientSecret: "");

            //app.UseTwitterAuthentication(
            //   consumerKey: "",
            //   consumerSecret: "");

            string AppId = "1422591451368362";
            string AppSecret = "1cfcd1acafe19110b9097aa8c36f06c6";
#if DEBUG
            //--test id
            AppId = "1422636174697223";
            AppSecret = "900aef1ec2a079aa5c697bb78da9caa4";
#endif

            var facebookAuthenticationOptions = new FacebookAuthenticationOptions()
            {
                    AppId = AppId,
                    AppSecret = AppSecret
            };

            //  facebookAuthenticationOptions.Scope.Add("user_birthday");
            //            facebookAuthenticationOptions.Scope.Add("name");
            //          facebookAuthenticationOptions.Scope.Add("last_name");
            //        facebookAuthenticationOptions.Scope.Add("publish_stream");
            //  facebookAuthenticationOptions.Scope.Add("user_photos");
            facebookAuthenticationOptions.Scope.Add("email");

            app.UseFacebookAuthentication(facebookAuthenticationOptions);


            // writerstars.azurewebsites.net
            //app.UseFacebookAuthentication(new FacebookAuthenticationOptions
            //{
            //    AppId = "1422591451368362",
            //    AppSecret = "1cfcd1acafe19110b9097aa8c36f06c6"

            //});

            //app.UseFacebookAuthentication(
            //   appId: "1422591451368362",
            //   appSecret: "1cfcd1acafe19110b9097aa8c36f06c6");

            app.UseGoogleAuthentication(new GoogleOAuth2AuthenticationOptions()
            {
                ClientId = "207791775127-644viaqb40cj2fub4gtikbgi23t32ge7.apps.googleusercontent.com",
                ClientSecret = "zoAL4lHK5uNXff6GV7XBc6_3"
            });
        }
    }
}